home *** CD-ROM | disk | FTP | other *** search
/ The X-Philes (2nd Revision) / The X-Philes Number 1 (1995).iso / xphiles / coding / dsp / c30ug.exe / $LATINV.ASM < prev    next >
Encoding:
Assembly Source File  |  1988-03-26  |  2.7 KB  |  88 lines

  1. ;**************************************************************
  2. ;  
  3. ;                 $latinv.asm
  4. ;  
  5. ;                 staff
  6. ;  
  7. ;                 03-26-88
  8. ;  
  9. ;           (C) Texas Instruments Inc., 1992 
  10. ;  
  11. ;           Refer to the file 'license.txt' included with this 
  12. ;           this package for usage and license information. 
  13. ;  
  14. ;**************************************************************
  15. Example 39.  Inverse lattice filter
  16. ;
  17. ;==============================================================================
  18. ;                        SUBROUTINE L A T I N V
  19. ;==============================================================================
  20. ; LATINV  == LATTICE FILTER (LPC INVERSE FILTER - ANALYSIS)
  21. ;
  22. ;
  23. ; TYPICAL CALLING SEQUENCE:
  24. ;
  25. ;       load    R2
  26. ;       load    AR0
  27. ;       load    AR1
  28. ;       load    RC
  29. ;       CALL    LATINV
  30. ;
  31. ;
  32. ; ARGUMENT ASSIGNMENTS:
  33. ;   argument | function
  34. ;   ---------+-----------------------
  35. ;   R2       | f(0,n) = x(n)
  36. ;   AR0      | address of filter coefficients (k(1))
  37. ;   AR1      | address of backward propagation values (b(0,n-1))
  38. ;   RC       | RC = p - 2
  39. ;
  40. ; REGISTERS USED AS INPUT: R2, AR0, AR1, RC
  41. ; REGISTERS MODIFIED: R0, R1, R2, R3, RS, RE, RC, AR0, AR1
  42. ; REGISTER CONTAINING RESULT: R2 (f(p,n))
  43. ;
  44. ;
  45. ; PROGRAM SIZE: 10 words
  46. ;
  47. ; EXECUTION CYCLES: 13 + 3 * (p-1)
  48. ;
  49. ;==============================================================================
  50.     .global    LATINV
  51. ;
  52. ; i = 1
  53. ;
  54. LATINV  MPYF3   *AR0, *AR1, R0              ; k(1) * b(0,n-1) -> R0
  55.                                             ; assume f(0,n) -> R2.
  56.         LDF    R2,R3                       ; put b(0,n) = f(0,n) -> R3.
  57.         MPYF3   *AR0++(1),R2,R1             ; k(1) * f(0,n) -> R1
  58. ;
  59. ; 2 <= i <= p
  60. ;
  61.         RPTB    LOOP
  62.         MPYF3   *AR0, *++AR1(1), R0         ; k(i) * b(i-1,n-1) -> R0
  63. ||      ADDF3   R2,R0,R2                    ; f(i-1-1,n)+k(i-1)*b(i-1-1,n-1)
  64. ;                                           ;  = f(i-1,n) -> R2
  65. ;
  66. ;                                           ; b(i-1-1,n-1)+k(i-1)*f(i-1-1,n)
  67.         ADDF3   *-AR1(1), R1, R3            ;  = b(i-1,n) -> R3
  68. ||      STF     R3, *-AR1(1)                ; b(i-1-1,n) -> b(i-1-1,n-1)
  69. ;
  70. LOOP    MPYF3   *AR0++(1),R2,R1             ; k(i) * f(i-1,n) -> R1
  71. ;
  72. ; i = p+1 (cleanup)
  73.  
  74.         ADDF3   R2,R0,R2                    ; f(p-1,n)+k(p)*b(p-1,n-1)
  75.                                             ;  = f(p,n) -> R2
  76. ;
  77. ;                                           ; b(p-1,n-1)+k(p)*f(p-1,n)
  78.         ADDF3   *AR1, R1, R3                ;  = b(p,n) -> R3
  79. ||      STF     R3, *AR1                    ; b(p-1,n) -> b(p-1,n-1)
  80. ;
  81. ; return sequence
  82. ;
  83.         RETS                                ; return
  84. ;
  85. ; end
  86. ;
  87.     .end
  88.